home *** CD-ROM | disk | FTP | other *** search
/ By Popular Request 2.0 / By Popular Request 2.0 (Arsenal Computer).ISO / amiga_6 / unrar100.lzx / unrar.h < prev   
C/C++ Source or Header  |  2003-06-30  |  6KB  |  233 lines

  1. /******    *****   ******
  2.  **   **  **   **  **   **      unRAR utility version 1.00e
  3.  ******   *******  ******       ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4.  **   **  **   **  **   **         FREE portable version
  5.  **   **  **   **  **   **         ~~~~~~~~~~~~~~~~~~~~~
  6.  
  7.      Definitions header
  8.  
  9.    UNCOMMENT ONE OF THE INITIAL LINES TO DEFINE YOUR OS TYPE.
  10.  
  11.  
  12.    NOTE: This code was modified by Derek Clarke to compile correctly on
  13.          SAS/C V6.x for the Amiga operating system.
  14.  
  15. */
  16.  
  17. /* #define DOS */        /* PC DOS is used */
  18. /* #define OS2  */        /* if OS/2 is used */
  19. /* #define UNIX */       /* if Unix branch OS is used */
  20. #define AMIGA
  21.  
  22. #include <stdio.h>
  23. #include <stdlib.h>
  24. #include <string.h>
  25. #include <ctype.h>
  26.  
  27. /*
  28.     In following generic OS definitions you can define the optional
  29.     macro SETFILETIME in order to allow UNRAR properly handle the time
  30.     format of your operating media.
  31.  
  32.     The first argument of SETFILETIME is FILE *DestFile, and the
  33.     second one - pointer to the DOS time structure.
  34.  
  35.     You can disable SETFILETIME by single ';' after the macro name:
  36.  
  37.     #define SETFILETIME(FPtr,DosTimePtr)  ;
  38. */
  39.  
  40.  
  41. /* DOS generic definitions */
  42. #ifdef DOS
  43. #include <fcntl.h>
  44. #include <io.h>
  45. #include <dir.h>
  46. #include <alloc.h>
  47.  
  48. typedef unsigned char   UBYTE;       /*  unsigned 8 bits value type  */
  49. typedef unsigned short  UWORD;       /*  unsigned 16 bits value type */
  50. typedef unsigned long   UDWORD;      /*  unsigned 32 bits value type */
  51. typedef long            SDWORD;      /*  signed 32 bits value type   */
  52. typedef UBYTE huge *    HPBYTE;      /*  pointer type addressing     */
  53.                                      /*  up to 96 kilobytes          */
  54.  
  55. #define MEMALLOC(Size)                farmalloc(Size)
  56. #define MEMFREE(Ptr)                  farfree(Ptr)
  57. #define MAKEDIR(Name)                 mkdir(Name)
  58. #define SETFILETIME(FPtr,DosTimePtr)  setftime(fileno(FPtr),DosTimePtr)
  59. #define PATHDIV                       '\\'
  60.  
  61. extern int _fmode=O_BINARY;
  62. #endif
  63.  
  64.  
  65. /* OS/2 generic definitions */
  66. #ifdef OS2
  67. #include <fcntl.h>
  68.  
  69. typedef unsigned char   UBYTE;
  70. typedef unsigned short  UWORD;
  71. typedef unsigned long   UDWORD;
  72. typedef long            SDWORD;
  73. typedef UBYTE *         HPBYTE;
  74.  
  75. #define MEMALLOC(Size)                malloc(Size)
  76. #define MEMFREE(Ptr)                  free(Ptr)
  77. #define PATHDIV                       '\\'
  78.  
  79. #ifndef __EMX__
  80. #define MAKEDIR(Name)                 mkdir(Name)
  81. #define SETFILETIME(FPtr,DosTimePtr)  setftime(fileno(FPtr),DosTimePtr)
  82. extern int _fmode=O_BINARY;
  83. #else
  84. #define MAKEDIR(Name)                 mkdir(Name, 0755)
  85. #define SETFILETIME(FPtr,DosTimePtr)  setfiletime(fileno(FPtr),DosTimePtr)
  86.  
  87. #define INCL_DOS
  88. #include <os2.h>
  89.  
  90. void setfiletime(int handle, void *timedate)
  91. {
  92.   FILESTATUS fs;
  93.   struct {
  94.     FTIME ft;
  95.     FDATE fd;
  96.   } s;
  97.  
  98.   memcpy(&s, timedate, sizeof(s));
  99.  
  100.   if ( DosQueryFileInfo(handle, FIL_STANDARD, (PBYTE) &fs, sizeof(fs)) )
  101.     return;
  102.  
  103.   fs.fdateLastWrite = fs.fdateCreation = s.fd;
  104.   fs.ftimeLastWrite = fs.ftimeCreation = s.ft;
  105.  
  106.   DosSetFileInfo(handle, FIL_STANDARD, (PBYTE) &fs, sizeof(fs));
  107. }
  108.  
  109. #endif
  110. #endif
  111.  
  112.  
  113. /* Unix generic definitions */
  114. #ifdef UNIX
  115. /* #include <unistd.h> */
  116.  
  117. typedef unsigned char   UBYTE;
  118. typedef unsigned short  UWORD;
  119. typedef unsigned long   UDWORD;
  120. typedef long            SDWORD;
  121. typedef UBYTE *         HPBYTE;
  122.  
  123. #define MEMALLOC(Size)                malloc(Size)
  124. #define MEMFREE(Ptr)                  free(Ptr)
  125. #define MAKEDIR(Name)                 mkdir(Name,0777)
  126. #define SETFILETIME(FPtr,DosTimePtr)  ;
  127. #define PATHDIV                       '/'
  128. #endif
  129.  
  130.  
  131. /* Amiga definitions */
  132. #ifdef AMIGA
  133. #include <dos.h>
  134.  
  135. typedef unsigned long   UDWORD;
  136. typedef long            SDWORD;
  137. typedef UBYTE *         HPBYTE;
  138.  
  139. #define MEMALLOC(Size)                malloc(Size)
  140. #define MEMFREE(Ptr)                  free(Ptr)
  141. #define MAKEDIR(Name)                 mkdir(Name)
  142. #define SETFILETIME(FPtr,DosTimePtr)  ;
  143. #define PATHDIV                       '/'
  144. #endif
  145.  
  146.  
  147. #define  UNP_VER       15       /* current version of unpacking method */
  148.  
  149. /* DOS specific file atributes flags */
  150. #define DOSFA_RDONLY   0x01
  151. #define DOSFA_HIDDEN   0x02
  152. #define DOSFA_SYSTEM   0x04
  153. #define DOSFA_LABEL    0x08
  154. #define DOSFA_DIREC    0x10
  155. #define DOSFA_ARCH     0x20
  156.  
  157. /* Exit codes */
  158. enum { SUCCESS,WARNING,FATAL_ERROR,CRC_ERROR,LOCK_ERROR,WRITE_ERROR,
  159.        OPEN_ERROR,USER_ERROR,MEMORY_ERROR,USER_BREAK=255 };
  160.  
  161. /* Status for shutdown */
  162. enum { SD_MEMORY=1,SD_FILES=2 };
  163.  
  164. /* Status for path comparison */
  165. enum { COMPARE_PATH,NOT_COMPARE_PATH };
  166.  
  167. /* Archive header flags */
  168. #define  MHD_MULT_VOL       1
  169. #define  MHD_COMMENT        2
  170. #define  MHD_LOCK           4
  171. #define  MHD_SOLID          8
  172.  
  173. /* File header flags */
  174. #define  LHD_SPLIT_BEFORE   1
  175. #define  LHD_SPLIT_AFTER    2
  176. #define  LHD_PASSWORD       4
  177. #define  LHD_COMMENT        8
  178. #define  SKIP_IF_UNKNOWN    0x4000
  179. #define  LONG_BLOCK         0x8000
  180.  
  181. /* Archive internal block types */
  182. enum { ALL_HEAD=0,MARK_HEAD=0x72,MAIN_HEAD=0x73,FILE_HEAD=0x74,
  183.        COMM_HEAD=0x75 };
  184.  
  185. /* HostOS code */
  186. enum { MS_DOS=0 };
  187.  
  188. /* Error codes */
  189. enum { EEMPTY = -1,EWRITE = 1,EREAD,EOPEN,ECLOSE,ESEEK,EMEMORY,EARCH };
  190.  
  191. struct dos_ftime {
  192.   unsigned ft_tsec  : 5;
  193.   unsigned ft_min   : 6;
  194.   unsigned ft_hour  : 5;
  195.   unsigned ft_day   : 5;
  196.   unsigned ft_month : 4;
  197.   unsigned ft_year  : 7;
  198. };
  199.  
  200. /* Headers definitions */
  201.  
  202. struct MarkHeader
  203. {
  204.   UBYTE Mark[5];
  205.   UWORD HeadSize;
  206. };
  207.  
  208. struct ArchiveHeader
  209. {
  210.   UWORD  HeadCRC;
  211.   UBYTE  HeadType;
  212.   UWORD  Flags;
  213.   UWORD  HeadSize;
  214.   UBYTE  Reserved[6];
  215. };
  216.  
  217. struct FileHeader
  218. {
  219.   UWORD  HeadCRC;
  220.   UBYTE  HeadType;
  221.   UWORD  Flags;
  222.   UWORD  HeadSize;
  223.   UDWORD PackSize;
  224.   UDWORD UnpSize;
  225.   UBYTE  HostOS;
  226.   UDWORD FileCRC;
  227.   struct dos_ftime FileTime;
  228.   UBYTE  UnpVer;
  229.   UBYTE  Method;
  230.   UWORD  NameSize;
  231.   UDWORD FileAttr;
  232. };
  233.